#include"compiler_run.hpp"
#include <jsoncpp/json/json.h>
#include"../comm/httplib.h"//cpp-libhttp：handOnly的开源项目，只需要拷贝头文件，就可以直接使用提供的方法

/***************************************
 *         整个compile_server的模块结构
 * 
 *           compiler_server.cc
 *                   |
 *           compiler_run.hpp
 *            /             \
 *           /               \
 *        compiler.hpp    runner.hpp
 * 
 *  compiler_server.cc 就是提供编译运行服务的;
 *  说白了就是把complier_run的Start函数功能打包成为网络服务;
 *  用户提交的代码(构成json串)给oj_server模块;
 *  oj_server请求compiler_server.cc 的编译运行服务;
 *  并将响应结果构成json串返回给用户;
 * *************************************/

using namespace httplib; //该库是一个阻塞式多线程的网络库
int main(int argc, char** argv)
{
    if(argc != 2)
    {
        std::cerr<<"Usage:"<<argv[0]<<" prot"<<std::endl;
        return 1;
    }

    Server svr;
    svr.Post("/compile_and_run",[](const Request& req,Response& resp){
        //拿到客户端的body(其实就是oj提交的代码加上后端的测试用例代码)
        std::string in_json= req.body; //该body就是一个json串
        std::string out_json;
        if(!in_json.empty())
        {
            //编译并且运行代码
            ns_compiler_and_run::CompileAndRun::Start(in_json,&out_json);
            //将结果返回给用户
            resp.set_content(out_json,"application/json;charset=utf-8");
        }
    });
   
    svr.listen("0.0.0.0",atoi(argv[1])); //启动http服务
    return 0;

}
